// 节流函数封装  移动端使用节流，而不引用lodash为了改善用户体验，节省流量
// 节流作用：降频，每间隔时间执行一次
// 脚手架默认开启严格模式，严格模式下this不再指向window,而是undefined
// 原型链：沿着原型链确认属性的值
// 作用域链：沿着作用域寻找变量的值
export const inputThrottle = (fn, t) => {
  // 3、声明一个常量保存定时器返回的ID，初始值赋值为null
  let timerID = null
  // 1、返回一个声明函数
  return function throttle () {
    // 4、如果当前已有定时器执行，则通过return不再执行
    // console.log(this)
    if (timerID) return
    // 2、使用定时器封装逻辑代码
    timerID = setTimeout(() => {
      fn.apply(this)
      timerID = null // 5、当前定时器内部代码执行完毕后及时置空
    }, t)
  }
}

// 防抖函数封装
// 防抖作用：降频，间隔时间内只执行最后一次

// 1、声明函数并导出
export const inputDebounce = (fn, t) => {
  // 4、定义一个常量接收定时器返回的ID
  let timerID = null
  // 2、返回一个函数
  return function debounce () {
    // 5、用户再次操作时判断当前定时器是否开启，如开启，则关闭重新开启，直至不再操作执行定时器逻辑代码
    clearTimeout(timerID)
    // 3、定义一个定时器执行逻辑代码
    timerID = setTimeout(() => {
      fn()
    }, t)
  }
}
